package com.itcam.phaseii.innerclass;

public class MemberInnerClass01 {
    public static void main(String[] args) {
        OuterM outerM = new OuterM();
        outerM.t1();

        // 外部类使用成员内部类的两种方式
        // 方式一
        // 相当于把new InnerM()当做是outerM的成员
        OuterM.InnerM innerM = outerM.new InnerM();
//        OuterM.InnerM innerM1 = new OuterM.InnerM();
        innerM.say();

        // 方式二,在外部类中编写一个方法返回一个InnerM对象
        OuterM.InnerM innerMInstance = outerM.getInnerMInstance();
        innerMInstance.say();
    }
}

class OuterM { //外部类
    private int n1 = 10;
    public String name = "张三";

    // 成员内部类，是定义在外部类的成员位置
    // 可以添加任意访问修饰符
    public class InnerM { //成员内部类
        // 可以直接访问外部类的所有成员，包含私有
        public void say() {
            System.out.println("n1 = " + n1 + " name = " + name);
        }

        private double sal = 0.8;
    }

    // 该方法返回一个InnerM的实例
    public InnerM getInnerMInstance() {
        return new InnerM();
    }

    public void t1() {
        // 使用成员内部类
        InnerM innerM = new InnerM();
        innerM.say();
        System.out.println(innerM.sal);
    }
}
